package com.bincky.listener;

import com.bincky.common.BaseCase;
import com.google.common.io.Files;
import io.qameta.allure.Attachment;
import org.testng.IHookCallBack;
import org.testng.IHookable;
import org.testng.ITestResult;

import java.io.File;
import java.io.IOException;

/**
 * 描述:
 *
 * @author Bincky Liang
 * @date 2021-02-21 10:55:43
 */

public class AllureReportListener implements IHookable {

    @Override
    public void run(IHookCallBack callBack, ITestResult testResult) {
        //run：测试用例执行过程中运行的方法
        //可以在这个方法的内部去判断用例的执行结果（成功/失败）
        //执行对应的测试方法
        callBack.runTestMethod(testResult);
        //通过测试用例的结果判断
        //测试结果有抛出了异常（没有执行成功）
        if (testResult.getThrowable() != null){
            //截图
            try {
                takeScreenShot(testResult.getMethod().getMethodName());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 把截图嵌入到报表里面去
     * @param methodName
     * @return
     * @throws Exception
     */
    @Attachment(value = "Failure in method {0}",type = "image/png")
    private byte[] takeScreenShot(String methodName) throws Exception {
        //调用截图方法返回file类型的对象
        File screenshot = BaseCase.takeScreenShot();
        return Files.toByteArray(screenshot);
    }
}
